len が関数になっている理由
len() が .length() メソッドだったらどうなるか。
あるコンテナは .length() の代わりに、 .len() や .size() という名前を使ってしまうかもしれない。
「サイズを取るメソッドは.length()」という 暗黙のルールができてしまい、そのルールが頭に入っていない人が一貫性の無いコードを書いてしまう。
IMO:Zen of Pythonより暗黙は好まれない!
Pythonは、何かのルールに準拠するためのメソッド(以降、特殊メソッド)は「__???__」という形にする、という一般ルールをつくり、それを interface の代わりにした。
予約語以外の「暗黙のルールで使わないほうが良い語」を気にしなくてよくなる。
特殊メソッドは、直接呼ぶことも出来るが基本的には何かのインタフェースを通して呼ぶ事になる。
__len__ に対するインタフェースは len() という組み込み関数になっている。
*1:for x in y: でも y.__iter__ が呼ばれるのでiter()だけが__iter__()のインタフェースというわけではないが
IMO:Python使いは特殊メソッドのことを知らなくてよい(「lenを使おう」と教えられる)